package com.fdb.efp.nls.service.util;

import com.baidu.unionloan.common.util.Security;
import com.fdb.basic.framework.core.exception.BizException;
import com.fdb.basic.framework.core.util.ZipUtil;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.util.Objects.requireNonNull;

public class BaiduContractFileUtil {

	private static Logger logger = LoggerFactory.getLogger(BaiduContractFileUtil.class);

	/**
	 * @description:使用MD5校验文件
	 * @param tar
	 *            tar包
	 * @param md5
	 *            md5文件
	 * @throws Exception
	 * @date:2019年03月26日 下午3:30:17
	 * @author:ludayong
	 */
	public static void doUnTarGZip(File tar, File md5, String tarGz) throws Exception {
		logger.info("百度合同文件解压开始...");
		logger.info("tar包路径： " + requireNonNull(tar).getAbsolutePath());
		logger.info("md5文件路径： " + requireNonNull(md5).getAbsolutePath());

		boolean verifyFile = verifyFile(tar, md5);
		if (!verifyFile) {
			logger.error("md5校验失败！");
			throw new Exception("md5校验失败！");
		}
		logger.info("md5校验成功！");

		// 百度合同文件解压
		String unTarGZipFilePath = tar.getParent() + File.separator + tar.getName().replace(tarGz, "");
		// 解压路径
		File unTarGZipFile = new File(unTarGZipFilePath);
		if (unTarGZipFile.exists()) {
			// 如果文件或者目录存在，则删除
			if (unTarGZipFile.isDirectory()) {
				ZipUtil.deleteDirectory(unTarGZipFilePath);
			} else {
				unTarGZipFile.delete();
			}
			// 创建新的目录
			unTarGZipFile.mkdir();
		} else {
			// 创建新的目录
			unTarGZipFile.mkdir();
		}
		Security.doUnTarGZip(tar.getParent(), unTarGZipFilePath, tar.getName());
		logger.info("百度合同文件解压结束...");
	}

	/** ---------------------------------------------------- **/
	/** private methods **/
	/** ---------------------------------------------------- **/
	private static boolean verifyFile(File tar, File md5) throws Exception {
		String fileMd5 = FileUtils.readLines(md5, "UTF-8").get(0);
		String actualMd5 = Security.generateMD5(tar);
		return fileMd5.equals(actualMd5);
	}

	/**
	 * 
	 * @param regex
	 *            中文正则表达式
	 * @param str
	 * @return
	 */
	public static boolean isMatchesCn(String str) {
		if (null == str)
			return false;
		Pattern p = Pattern.compile("[\\u4e00-\\u9fa5]");
		Matcher m = p.matcher(str);
		if (m.find()) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 
	 * 将日期格式为yyyy-MM-dd HH:mm:ss改为yyyy-MM-dd <br>
	 * 0.1:ludayong:2019年6月5日 下午8:13:50:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年6月5日 下午8:13:50
	 * @date 2019年6月5日 下午8:13:50
	 * @version 0.1
	 */
	public static String formatDateTime19To10(String date) throws BizException {
		if (date == null || "".equals(date)) {
			return "";
		}
		if (date.length() != 14) {
			throw new BizException("时间：" + date + "格式不合规");
		}
		try {
			SimpleDateFormat sfl = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd");
			String dt = sf2.format(sfl.parse(date));
			return dt;
		} catch (Exception e) {
			throw new BizException("时间：" + date + "格式不合规");
		}
	}

	/**
	 * 
	 * 将日期格式为yyyy-MM-dd HH:mm:ss改为yyyyMMdd <br>
	 * 0.1:ludayong:2019年6月5日 下午8:13:50:新增 <br>
	 * 
	 * @author ludayong
	 * @since 2019年6月5日 下午8:13:50
	 * @date 2019年6月5日 下午8:13:50
	 * @version 0.1
	 */
	public static String formatDateTime19To8(String date) throws BizException {
		if (date == null || "".equals(date)) {
			return "";
		}
		if (date.length() != 14) {
			throw new BizException("时间：" + date + "格式不合规");
		}
		try {
			SimpleDateFormat sfl = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			SimpleDateFormat sf2 = new SimpleDateFormat("yyyyMMdd");
			String dt = sf2.format(sfl.parse(date));
			return dt;
		} catch (Exception e) {
			throw new BizException("时间：" + date + "格式不合规");
		}
	}
}
